#include <iostream>
#include "cola_piezas.h"
#include "graficos.h"
#include "imagen.h"
using namespace std;
using namespace graficos;

ColaPiezas::ColaPiezas(){
	this->tam=0;
	this->vp=0;
}
ColaPiezas::ColaPiezas(int posx,int posy,int ancho,int alto,int marco,const Color& borde,const Color& fondo, const VectorPiezas &vp,int tam){
	this->vp.SetTama(tam);
	this->tam=tam;
	
	for(int i=0;i<this->Tama();i++){
		this->vp[i]=vp[rand()%vp.Tama()];
	}

	this->ancho=ancho;
	this->alto=alto;
	this->marco=marco;
	this->posx=posx;
	this->posy=posy;
	
	this->fondo.SetColor(fondo.GetR(),fondo.GetG(),fondo.GetB());
	this->borde.SetColor(borde.GetR(),borde.GetG(),borde.GetB());



}

int ColaPiezas::Tama()const{return this->tam;}

void ColaPiezas::InsertarPieza(const Pieza &p){
	for(int i=0;i<this->Tama()-1;i++){
		this->vp[i]=this->vp[i+1];
	}
	this->vp[this->Tama()-1]=p;

}

Pieza& ColaPiezas::operator[](int i)const{return this->vp[i];}	

void ColaPiezas::Pinta(Imagen im[],int num_imagenes)const{
	//Creo el borde
	for(int i=0;i<marco;i++){ 
		Rectangulo(posy+i,posx+i,ancho-i+posy,alto-i+posx,borde.GetR(),borde.GetG(),borde.GetB());
	}
	//Creo el fondo
	RectanguloR(posy+marco,posx+marco,ancho-marco+posy,alto-marco+posx,fondo.GetR(),fondo.GetG(),fondo.GetB());

	
	//inicializo posiciones en pantalla
	int x=im[0].Alto()+posx;
	int y=posy+(ancho/2)-(vp[0].Columnas()*im[0].Ancho()/2);		
	//Pinto las piezas
	for(int i=0;i<this->tam;i++){
		y=posy+ (ancho/2)-(vp[i].Columnas()*im[i%num_imagenes].Ancho()/2);
		for(int j=0;j<this->vp[i].Filas();j++){
			for(int k=0;k<this->vp[i].Columnas();k++){
				
				if(vp[i].Get(j,k)!=0){
					im[((this->vp[i].Get(j,k))-1)%num_imagenes].DibujarImagen(y,x);
					
					
				}	
				y=y+im[i%num_imagenes].Ancho();	
			}
			x=x+im[i%num_imagenes].Alto();
			y=posy+(ancho/2)-(vp[i].Columnas()*im[i%num_imagenes].Ancho()/2);
			
		}
		x=x+im[i%num_imagenes].Alto();
	}
	
}


ColaPiezas::~ColaPiezas(){
	
}

